package initialized

import (
	"fmt"
	"github.com/fsnotify/fsnotify"

	"github.com/spf13/viper"
	"user/public"
)

func InitCfg() {
	//初始化viper读取配置信息
	v := viper.New()
	//设置读取文件类型
	v.SetConfigType("yaml")
	//设置读取文件
	v.SetConfigFile("dev/cfg/dev_cfg.yaml")

	err := v.ReadInConfig()
	if err != nil {
		fmt.Println("读取配置文件出错", err)
		return
	}

	err = v.Unmarshal(&public.UserConfig)
	if err != nil {
		fmt.Println("解析配置文件出错", err)
		return
	}
	fmt.Println("动态监听的读取是", public.UserConfig)
	fmt.Println("动态监听nacos的读取是", public.UserConfig.Nacos)
	//监听config
	v.WatchConfig()
	//动态读取
	v.OnConfigChange(func(in fsnotify.Event) {

		err := v.ReadInConfig()
		if err != nil {
			fmt.Println("读取配置文件出错", err)
			return
		}

		err = v.Unmarshal(&public.UserConfig)
		if err != nil {
			fmt.Println("解析配置文件出错", err)
			return
		}
		fmt.Println("动态监听的读取是", public.UserConfig)
		fmt.Println("动态监听nacos的读取是", public.UserConfig.Nacos)
	})

	//配置nacos信息
	// 创建clientConfig

	//clientConfig := constant.ClientConfig{
	//	NamespaceId:         public.UserConfig.Nacos.NameSpaceId, // 如果需要支持多namespace，我们可以创建多个client,它们有不同的NamespaceId。当namespace是public时，此处填空字符串。
	//	TimeoutMs:           5000,
	//	NotLoadCacheAtStart: true,
	//	LogDir:              "tmp/nacos/log",
	//	CacheDir:            "tmp/nacos/cache",
	//	LogLevel:            "debug",
	//}

	// 至少一个ServerConfig
	//serverConfigs := []constant.ServerConfig{
	//	{
	//		IpAddr:      public.UserConfig.Nacos.Host,
	//		ContextPath: "/nacos",
	//		Port:        uint64(public.UserConfig.Nacos.Port),
	//		Scheme:      "http",
	//	},
	//}

	// 创建动态配置客户端的另一种方式 (推荐)
	//configClient, err := clients.NewConfigClient(
	//	vo.NacosClientParam{
	//		ClientConfig:  &clientConfig,
	//		ServerConfigs: serverConfigs,
	//	},
	//)
	//if err != nil {
	//	fmt.Println("创建动态配置客户端出错", err)
	//	return
	//}
	//content, err := configClient.GetConfig(vo.ConfigParam{
	//	DataId: public.UserConfig.Nacos.DataId,
	//	Group:  public.UserConfig.Nacos.Group})
	//if err != nil {
	//	fmt.Println("设置dataid和group错误", err)
	//	return
	//}
	//err = json.Unmarshal([]byte(content), &public.UserConfig)
	//if err != nil {
	//	fmt.Println("解析配置为json出错", err)
	//	return
	//}
	//fmt.Println("解析的json配置文件是", public.UserConfig)

}
